package com.limit.controller;

import com.limit.rateLimit.TokenBucketTimeWindow;
import com.limit.service.TimeWindowLimit;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @作者: 林江
 * @创建时间: 2023/12/20
 * @功能:
 */
@RestController
public class LimitController {

    TimeWindowLimit timeWindow;

    public LimitController() {
        timeWindow = new TokenBucketTimeWindow();
    }

    /**
     * 固定时间窗口算法
     *
     * @return
     */
    @GetMapping("/simple")
    public String limit1() {
        if (timeWindow.limit()) {
            return "被限流了";
        }
        return "访问成功";
    }


    /**
     * 滑动时间窗口算法
     *
     * @return
     */
    @GetMapping("/slide")
    public String limit2() {
        if (timeWindow.limit()) {
            return "被限流了";
        }
        return "访问成功";
    }

    /**
     * 漏桶算法
     *
     * @return
     */
    @GetMapping("/leakyBucket")
    public String limit3() {
        if (timeWindow.limit()) {
            return "被限流了";
        }
        return "访问成功";
    }

    /**
     * 令牌桶算法
     *
     * @return
     */
    @GetMapping("/tokenBucket")
    public String limit4() {
        if (timeWindow.limit()) {
            return "被限流了";
        }
        return "访问成功";
    }
}
